package com.gexin.weixin.kit;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.gexin.model.weixin.WeixinAppConfig;
import com.jfinal.log.Log;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.cache.RedisAccessTokenCache;

/**
 *  获取微信 配置信息
 * @author 肖得明
 */
public class WxConfigKit {
	public  static final Log  log  =   Log.getLog(WxConfigKit.class);
	
	public static void init(){
		//初始化现在的支付信息
		List<WeixinAppConfig>    list =WeixinAppConfig.dao.find("select * from  t_weixin_app_config");
		for(WeixinAppConfig config :  list){
			ApiConfigKit.putApiConfig(config.getApiConfig());
		}
	
	   ApiConfigKit.setAccessTokenCache(new RedisAccessTokenCache());
	}
	/**默认获取的ID**/
	private static final Integer Default_AppId= 1;
	public static Map<Integer, WeixinAppConfig>  app_list =new HashMap<Integer, WeixinAppConfig>();
	
	/**
	 * 如果修改了 配置信息 一定要记得 清理下这个的缓存信息
	 * @param id  Id信息
	 */
	public  static  void  clear_CacheById(Integer   id){
		log.info("clear  weixin app cache");
		WxConfigKit.init();
		app_list.remove(id);
	}
	
	/**
	 * 从缓存里面读取 微信配置信息   注意这个不适合分布式 如果分布式请修改为redis 存取
	 * @param id  配置id
	 * @return
	 */
	public static WeixinAppConfig cache_getConfigById(Integer id){
		WeixinAppConfig  config = app_list.get(id);
		if(config==null){
			config = WeixinAppConfig.dao.findById(id);
		}
		return config;
	}
	
	/**
	 * 获取默认的配置  默认会读取 Default_AppId 的配置
	 * @return
	 */
	public static ApiConfig getApiConfig(){
		return  getApiConfig(Default_AppId);
	}
	
	/**
	 * 获取微信的config的信息
	 * @param id
	 * @return
	 */
	public static ApiConfig getApiConfig(Integer  id){
		WeixinAppConfig  config  =cache_getConfigById(id);
		if(config!=null){
			return cache_getConfigById(id).getApiConfig();
		}
		log.error("获取微信配置   对象的ID不存在："+id);
		return null;
	}
}
